﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace DigitalClockv2 {
    /// <summary>
    /// Realice los pasos 1a o 1b y luego 2 para usar este control personalizado en un archivo XAML.
    ///
    /// Paso 1a) Usar este control personalizado en un archivo XAML existente en el proyecto actual.
    /// Agregue este atributo XmlNamespace al elemento raíz del archivo de marcado en el que 
    /// se va a utilizar:
    ///
    ///     xmlns:MyNamespace="clr-namespace:DigitalClock_v2"
    ///
    ///
    /// Paso 1b) Usar este control personalizado en un archivo XAML existente en otro proyecto.
    /// Agregue este atributo XmlNamespace al elemento raíz del archivo de marcado en el que 
    /// se va a utilizar:
    ///
    ///     xmlns:MyNamespace="clr-namespace:DigitalClock_v2;assembly=DigitalClock_v2"
    ///
    /// Tendrá también que agregar una referencia de proyecto desde el proyecto en el que reside el archivo XAML
    /// hasta este proyecto y volver a generar para evitar errores de compilación:
    ///
    ///     Haga clic con el botón secundario del mouse en el proyecto de destino en el Explorador de soluciones y seleccione
    ///     "Agregar referencia"->"Proyectos"->[seleccione este proyecto]
    ///
    ///
    /// Paso 2)
    /// Prosiga y utilice el control en el archivo XAML.
    ///
    ///     <MyNamespace:CustomControl1/>
    ///
    /// </summary>
    public class CustomControl1 : Control {
        System.Timers.Timer timer= new System.Timers.Timer();
        public static readonly DependencyProperty TimeProperty;
        delegate void SetterDelegate();

        static CustomControl1() {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
            FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata();
            TimeProperty = DependencyProperty.Register("Time", typeof(string), typeof(CustomControl1), metadata);
        }

        public CustomControl1() {
           
            timer.Elapsed += timer_Elapsed;
            timer.Interval = 1000;
            timer.Start();
            this.DataContext = this;
        
        }

        public void timer_Elapsed(object sender,System.Timers.ElapsedEventArgs arg){
        Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,new SetterDelegate(timerSetter));
        }

         void timerSetter(){
             SetValue(TimeProperty, DateTime.Now.ToLongTimeString());
        }
    }
}
